#ifndef ARROWBUTTON_H
#define ARROWBUTTON_H

#include <QPushButton>
#include <QPainter>
#include <QPixmap>

// 上下左右箭头按钮类

// 枚举定义按钮的箭头方向
enum class ArrowDirection
{
    Up,         // 上
    Down,       // 下
    Left,       // 左转
    Right,      // 右转
    LeftShift,  // 左平移
    RightShift  // 右平移
};

class ArrowButton : public QPushButton
{
    Q_OBJECT

  public:
    explicit ArrowButton(ArrowDirection direction, QWidget* parent = nullptr);
    // 设置箭头方向
    void setDirection(ArrowDirection direction);

    // 设置边框颜色
    void setBorderColor(const QColor& color);
    // 设置边框宽度
    void setBorderWidth(int width);
    // 设置箭头颜色
    void setArrowColor(const QColor& color);

  protected:
    // 重写绘制事件
    void paintEvent(QPaintEvent* event) override;
    // 鼠标事件用于悬停效果
    bool event(QEvent* event) override;
    // 调整大小时重新生成缓存图像
    void resizeEvent(QResizeEvent* event) override;

  private:
    // 生成缓存图像
    void generateCache();

    // 绘制单箭头（用于上下和平移）
    void drawSingleArrow(QPainter& painter, int centerX, int centerY, int arrowSize);
    // 绘制弯折箭头（用于转向）
    void drawCurvedArrow(QPainter& painter, int centerX, int centerY, int arrowSize, bool isLeft);
    // 绘制平移箭头（单箭头+方框）
    void drawShiftArrow(QPainter& painter, int centerX, int centerY, int arrowSize, bool isLeft);

  private:
    ArrowDirection m_direction;  // 存储当前箭头方向
    QColor m_borderColor;        // 边框颜色
    int m_borderWidth;           // 边框宽度
    QColor m_arrowColor;         // 箭头颜色
    bool m_isHovered;            // 鼠标悬停状态
    QPixmap m_cache;             // 缓存绘制图像
};

#endif  // ARROWBUTTON_H